文档 / 平台架构

数据模型与租户隔离

租户 = 应用(appid)

所有业务表都带 appid 列,作为第一隔离维度。你的应用永远只能读写自己的数据,跨应用访问返回 404/403。

通用列

业务表遵循通用约定:

说明
idUUIDv7(全局唯一、可排序)
appid租户标识
created_at / updated_atISO 8601(UTC)
deleted_at软删除标记
version乐观锁版本号
created_by / updated_by操作者

乐观锁

写操作要求携带 version

PATCH /content/v1/contents/{id}   body: { ..., "version": 7 }

服务端执行 UPDATE ... WHERE id=? AND version=7,不匹配则返回 409 VERSION_CONFLICT。每次成功写操作 version+1

审计日志

每个平台有 *_audit_log 表,记录所有状态迁移与写操作(actor、action、changes、request_id、ip),保留 ≥ 180 天,支持游标分页查询。

事件

关键业务状态变化发事件(如 content.publishedorder.paid),事件载荷含 appid,订阅方按租户过滤。

多语言数据

  • 内容:contents.lang 字段(BCP-47),同一内容不同语言建议各建一条,用 meta_json.variant_ids 关联;
  • 名称类字段:name_json / description_json(JSON:{en, cn, tw, jp, de, fr, es, ar});
  • 语言包:i18n 平台统一管理,应用前端按 lang 参数取词。